#include<iostream>
using namespace std;
int main()
{
	int num1[10] = { 10,56,73,9,15,36,22,89,115,3 }; // 创建一个数组，存放需要排序的数字
	int min = num1[0];  // 假设第一个元素为最小值           
	int min_Index = 0;  // 最小值下标
	int temp;
	/*如果需要自行输入再创建一个输入循环就可以了
	int num1[10]{};
	for(int i = 0; i < 10; i++)
	{
		cin>>num1[i];
	}*/
	cout << "排序前:" << endl;      // 直接输出排序前的数
	for (int i = 0; i < 10; i++)         
	{
		cout << num1[i] << " ";
	}
	cout << endl;
 
	for (int i = 0; i < 10; i++)     // 外层循环控制比较轮数
	{
		min = num1[i];           // 假设第一个元素为最小值，为了方便下面找最小值
		min_Index = i; 
		for (int j = i + 1; j < 10; j++)  // 内层循环控制第i轮后需要比较的次数
		{
			if (num1[j] < min)        // 按照从小到大顺序排序
			{
				min = num1[j];    // 找最小值
				min_Index = j;
			}
	}
		temp = num1[min_Index];     // 把取得的最小值和第一个数相交换
		num1[min_Index] = num1[i];
		num1[i] = temp;
	
   //第二轮循环从第二个数开始相同原理再找最小值，直到结束
}
 
 
	cout << "排序后:" << endl;
	for (int i = 0; i < 10; i++)          // 顺序输出排序后的数
	{
		cout << num1[i] << " ";
	}
	cout << endl;
	return 0;
}
// 选择排序的特点就是交换移动数据次数相当少，节约了时间
// 无论最好还是最坏情况，其比较次数都是一样多的，共需要比较 （n-1）+ （n-2）+…+ 2 + 1 = n * (n-1)/2次；
// 而对交换次数而言，当最好的时候，交换0次，最差时，交换n-1次;
// 基于最终的排序时间是比较和交换次数总和，因此，总的时间复杂度依然为O(n^2)。
